package com.atguigu.designpattern.strategy.impl;

import com.atguigu.designpattern.strategy.SortStrategy;
import lombok.AllArgsConstructor;
import lombok.Getter;

import java.util.Arrays;

/**
 * @author Jungle
 * @description 枚举整合所有排序策略
 */
@AllArgsConstructor
@Getter
public enum SortStrategyEnum implements SortStrategy {


    /**
     * 冒泡排序
     */
    BUBBLE_SORT(1,"冒泡排序") {
        @Override
        public void sort(Integer[] arr) {
            System.out.println("开始冒泡排序...");
            for (int i = 0; i < arr.length - 1; i++) {
                for (int j = 0; j < arr.length - 1 - i; j++) {
                    if (arr[j] > arr[j + 1]) {
                        int temp = arr[j];
                        arr[j] = arr[j + 1];
                        arr[j + 1] = temp;
                    }
                }
            }
            System.out.println("排序结果：" + Arrays.toString(arr));
        }
    },

    /**
     * 快速排序（使用 Arrays.sort）
     */
    QUICK_SORT(2,"快速排序") {
        @Override
        public void sort(Integer[] arr) {
            System.out.println("开始快速排序...");
            Arrays.sort(arr);
            System.out.println("排序结果：" + Arrays.toString(arr));
        }
    };

    private final int code;       // 策略编号
    private final String message; // 策略描述

    /**
     * 通过 code 获取枚举实例
     */
    public static SortStrategyEnum fromCode(int code) {
        for (SortStrategyEnum strategy : values()) {
            if (strategy.code == code) {
                return strategy;
            }
        }
        throw new IllegalArgumentException("未知的排序策略 code：" + code);
    }
}
